#include "XPT2046.h"
void xpt_send_data(unsigned char byte_data)
{
    for (i = 0; i < 8; i++)
    {
        // 从高位逐个bit发送
        XPT_DCLK = 0;
        XPT_DIN = byte_data & (0X80 >> i);
        XPT_DCLK = 1;
    }
    // 发送之后，需要一个时钟周期BUSY
}

void send_busy()
{
    XPT_DCLK = 0;
    _nop_();
    XPT_DCLK = 1;
    _nop_();
    // 清理busy,从机开始写数据
    XPT_DCLK = 0;
}

unsigned int xpt_receive_data()
{
    unsigned int receive_data = 0x00;
    for (i = 0; i < 12; i++)
    {
        _nop_();
        XPT_DCLK = 1;
        _nop_();
        // 时钟第二个跳变沿读数据(下降沿)
        XPT_DCLK = 0;
        _nop_();
        if (XPT_DOUT)
        {
            receive_data |= (0x80 >> i);
        }
    }
    return receive_data;
}

float read_adc_data(unsigned char read_cmd)
{
    XPT_CS = 0;
    XPT_DCLK = 0;
    xpt_send_data(read_cmd);
    clen_busy();
    unsigned int receive_data=xpt_receive_data();
    //十进制数值=Vref*ADC_Value/分辨率
    float decimal_data=5.0*(receive_data/4096);
    XPT_CS = 1;
    return decimal_data;
}